package com.eshanren.system;


import com.alibaba.druid.filter.stat.StatFilter;
import com.alibaba.druid.util.JdbcUtils;
import com.alibaba.druid.wall.WallFilter;
import com.eshanren.config.Config;
import com.eshanren.model._MappingKit;
import com.eshanren.route.WebRoute;
import com.jfinal.config.*;
import com.jfinal.kit.PathKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.activerecord.dialect.MysqlDialect;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.template.Engine;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;


/**
 * 系统配置
 *
 * @author WWF
 */
public class SystemConfig extends JFinalConfig {

    /**
     * 配置文件读取
     */
    @Override
    public void configConstant(Constants constants) {
        loadPropertyFile("database.properties");
    }

    /**
     * 路由设置
     */
    @Override
    public void configRoute(Routes me) {
        me.add(new WebRoute());
        //添加缓存插件
    }

    @Override
    public void configEngine(Engine me) {
        me.setDevMode(true);
    }

    /**
     * 插件配置
     */
    @Override
    public void configPlugin(Plugins plugins) {
        /* database */
        DruidPlugin druidPlugin = new DruidPlugin(getProperty("jdbcUrl"), getProperty("user"), getProperty("password"));
        druidPlugin.setDriverClass(getProperty("jdbcDriverClass"));
        // StatFilter提供JDBC层的统计信息
        druidPlugin.addFilter(new StatFilter());
        // WallFilter的功能是防御SQL注入攻击
        WallFilter wallFilter = new WallFilter();
        wallFilter.setDbType(JdbcUtils.MYSQL);
        //输出有sql注入疑问的sql
        wallFilter.setLogViolation(true);
        druidPlugin.addFilter(wallFilter);
        plugins.add(druidPlugin);

        /* database model map */
        ActiveRecordPlugin activeRecordPlugin = new ActiveRecordPlugin(druidPlugin);
        activeRecordPlugin.setDialect(new MysqlDialect());
        activeRecordPlugin.setShowSql(false);

        //添加sql模版
        String rootClassPath = PathKit.getRootClassPath();

        activeRecordPlugin.setBaseSqlTemplatePath(rootClassPath + "/sqls");
        activeRecordPlugin.addSqlTemplate("all.sql");

        plugins.add(activeRecordPlugin);
        _MappingKit.mapping(activeRecordPlugin);


    }

    /**
     * 拦截器
     */
    @Override
    public void configInterceptor(Interceptors me) {

    }

    /**
     * 配置处理器
     */
    @Override
    public void configHandler(Handlers me) {
    }

    /**
     * 同步线程
     */
    public static ScheduledExecutorService syncService = Executors.newSingleThreadScheduledExecutor();

    @Override
    public void afterJFinalStart() {

    }


    @Override
    public void beforeJFinalStop() {
        Config.IS_RUN = false;
        try {
            syncService.shutdown();
            try {
                syncService.awaitTermination(10, TimeUnit.MINUTES);
            } catch (Exception e) {
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

/* *
 * *
 * * ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━神兽出没━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 * * 　　　┏┓　　　┏┓
 * * 　　┏┛┻━━━┛┻┓
 * * 　　┃　　　　　　　┃
 * * 　　┃　　　━　　　┃
 * * 　　┃　┳┛　┗┳　┃
 * * 　　┃　　　　　　　┃
 * * 　　┃　　　┻　　　┃
 * * 　　┃　　　　　　　┃
 * * 　　┗━┓　　　┏━┛Code is far away from bug with the god animal protecting
 * * 　　　　┃　　　┃      神兽保佑,代码无bug
 * * 　　　　┃　　　┃
 * * 　　　　┃　　　┗━━━┓
 * * 　　　　┃　　　　　　　┣┓
 * * 　　　　┃　　　　　　　┏┛
 * * 　　　　┗┓┓┏━┳┓┏┛
 * * 　　　　　┃┫┫　┃┫┫
 * * 　　　　　┗┻┛　┗┻┛
 * *
 * *
 * * 　　　　　　　　┏┓　　　┏┓
 * * 　　　　　　　┏┛┻━━━┛┻┓
 * * 　　　　　　　┃　　　　　　　┃ 　
 * * 　　　　　　　┃　　　━　　　┃
 * * 　　　　　　　┃　＞　　　＜　┃
 * * 　　　　　　　┃　　　　　　　┃
 * * 　　　　　　　┃...　⌒　...　┃
 * * 　　　　　　　┃　　　　　　　┃
 * * 　　　　　　　┗━┓　　　┏━┛
 * * 　　　　　　　　　┃　　　┃　Code is far away from bug with the god animal protecting　　　　　　　　　　
 * * 　　　　　　　　　┃　　　┃     神兽保佑,代码无bug
 * * 　　　　　　　　　┃　　　┃　　　　　　　　　　　
 * * 　　　　　　　　　┃　　　┃ 　　　　　　
 * * 　　　　　　　　　┃　　　┃
 * * 　　　　　　　　　┃　　　┃　　　　　　　　　　　
 * * 　　　　　　　　　┃　　　┗━━━┓
 * * 　　　　　　　　　┃　　　　　　　┣┓
 * * 　　　　　　　　　┃　　　　　　　┏┛
 * * 　　　　　　　　　┗┓┓┏━┳┓┏┛
 * * 　　　　　　　　　　┃┫┫　┃┫┫
 * * 　　　　　　　　　　┗┻┛　┗┻┛
 * *
 * *
 * *
 * *　　　　　　　　┏┓　　　┏┓+ +
 * *　　　　　　　┏┛┻━━━┛┻┓ + +
 * *　　　　　　　┃　　　　　　　┃ 　
 * *　　　　　　　┃　　　━　　　┃ ++ + + +
 * *　　　　　　 ████━████ ┃+
 * *　　　　　　　┃　　　　　　　┃ +
 * *　　　　　　　┃　　　┻　　　┃
 * *　　　　　　　┃　　　　　　　┃ + +
 * *　　　　　　　┗━┓　　　┏━┛
 * *　　　　　　　　　┃　　　┃　　　　　　　　　　　
 * *　　　　　　　　　┃　　　┃ + + + +
 * *　　　　　　　　　┃　　　┃　　　　Code is far away from bug with the god animal protecting　　　　　　　
 * *　　　　　　　　　┃　　　┃ + 　　　　神兽保佑,代码无bug　　
 * *　　　　　　　　　┃　　　┃
 * *　　　　　　　　　┃　　　┃　　+　　　　　　　　　
 * *　　　　　　　　　┃　 　　┗━━━┓ + +
 * *　　　　　　　　　┃ 　　　　　　　┣┓
 * *　　　　　　　　　┃ 　　　　　　　┏┛
 * *　　　　　　　　　┗┓┓┏━┳┓┏┛ + + + +
 * *　　　　　　　　　　┃┫┫　┃┫┫
 * *　　　　　　　　　　┗┻┛　┗┻┛+ + + +
 * *
 * *
 * *                       _ooOoo_
 * *                      o8888888o
 * *                      88" . "88
 * *                      (| -_- |)
 * *                      O\  =  /O
 * *                   ____/`---'\____
 * *                 .'  \\|     |//  `.
 * *                /  \\|||  :  |||//  \
 * *               /  _||||| -:- |||||-  \
 * *               |   | \\\  -  /// |   |
 * *               | \_|  ''\---/''  |   |
 * *               \  .-\__  `-`  ___/-. /
 * *             ___`. .'  /--.--\  `. . __
 * *          ."" '<  `.___\_<|>_/___.'  >'"".
 * *         | | :  `- \`.;`\ _ /`;.`/ - ` : | |
 * *         \  \ `-.   \_ __\ /__ _/   .-` /  /
 * *    ======`-.____`-.___\_____/___.-`____.-'======
 * *                       `=---='
 * *    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 * *             佛祖保佑       永无BUG
 * *
 */